/**
 * @Author: Bobby
 * @Date: 2022-02-15 13:14:17
 * @LastEditTime: 2022-03-09 09:57:45
 * @LastEditors: Bobby
 * @Description:
 * @FilePath: \wms-v2\src\ve\eventTask\index.js
 * @CIMC-V2
 */
import waterfall from 'async/waterfall'
import Actions from './actions/index'
// import { cloneDeep } from 'lodash'
export function actionsTask(vm, module, actions, additionalData, cb, eventName, initialData) {
  console.group('Actions', actions)
  let _task = [
    function (done) {
      done(null, initialData || '')
    },
  ]
  let callbackData = {}
  let _indexObj = {
    _index: 0,
  }
  actions = actions || []
  actions.forEach((action) => {
    _task.push((arg, done) => {
      // 进行 index 处理
      console.log('动作执行', action._id, `${vm?.info.name}-${eventName}`, action.name)
      _indexObj._index++
      callbackData = arg
      try {
        Actions[action.event]({ vm, module, action, callbackData, additionalData, done, _task, _indexObj, eventName })
      } catch (e) {
        // 动作队列执行错误中断，则将执行状态改为false
        vm[`${eventName}IsRunning`] = false
        console.warn(e)
      }
    })
  })
  console.log('_task', _task)
  waterfall(_task, function (err, result) {
    console.log('完成 actions', err, result)
    console.log('完成交互事件！', eventName)
    // 动作队列执行完成，则将执行状态改为false
    vm[`${eventName}IsRunning`] = false
    console.groupEnd()
    // 删除动作数据存储
    vm.$store.dispatch('actionDatas/delActionsData', vm.info._id)
    cb()
  })
}

function interactionsTask(vm, type, module, additionalData) {
  let _task = []
  module.interaction.forEach((item) => {
    if (item.event === type) {
      _task.push((done) => {
        console.log('执行交互事件:', item.event, vm[`${item.event}IsRunning`])
        // 事件动作节流 若组件上次相同事件还未结束 则不执行此次动作队列
        if (!vm[`${item.event}IsRunning`]) {
          setTimeout(() => {
            actionsTask(vm, module, item.actions, additionalData, done, item.event)
          })
        }
        // 事件动作节流 动作队列开始执行，则将执行状态改为true
        vm[`${item.event}IsRunning`] = true
        // setTimeout(() => {
        //   vm[`${item.event}IsRunning`] = false
        // }, 3000)
      })
    }
  })

  return _task
}
//data 附加参数用于传递
export function eventTask(vm, type, module, additionalData, callbackFunction) {
  console.group('运行 Interactions', type, vm[`${type}IsRunning`], module)
  // 如果当前动作正在运行 则直接返回
  if (vm[`${type}IsRunning`]) return
  let _task = interactionsTask(vm, type, module, additionalData)
  waterfall(_task, function () {
    console.log('完成 interactions', vm)
    console.groupEnd()
    if (vm.defaultFocusNextModule) {
      // 如果阻止了聚焦下一个组件 则聚焦当前组件并选中
      const moduleId = vm.info._id
      if (moduleId.indexOf('uiSelectLayerNew') > -1) {
        // 如果是三点选择组件 则调用单独的方法
        vm.enterFocus()
      } else if (moduleId.indexOf('uiDynamicFormLot') > -1) {
        // 如果是批次属性组件 则聚焦渲染的最后一个组件
        const focusModuleId = vm.info.CUR_LOT_list && vm.info.CUR_LOT_list[vm.info.CUR_LOT_list.length - 1]
        const focusModuleRef = vm.vuiComponents[focusModuleId] && vm.vuiComponents[focusModuleId].ref
        focusModuleRef.focus && focusModuleRef.focus()
        focusModuleRef.select && focusModuleRef.select()
      } else {
        const moduleRef = vm.vuiComponents[moduleId].ref
        moduleRef.focus && moduleRef.focus()
        moduleRef.select && moduleRef.select()
      }
    } else {
      callbackFunction && callbackFunction(vm)
    }
  })
}
